home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / internet / amitcp3.0b / netinclude / inline / socket.h next >
Encoding:
C/C++ Source or Header  |  1997-11-21  |  27.3 KB  |  920 lines

  1. #ifndef _INLINE_SOCKET_H
  2. #define _INLINE_SOCKET_H
  3.  
  4. /*
  5.  * $Id: socket.h,v 3.1 1994/01/22 11:37:36 too Exp $
  6.  * $Release$
  7.  *
  8.  * Gcc inlines for bsdsocket.library. 
  9.  *
  10.  * Copyright © 1994 AmiTCP/IP Group, <amitcp-group@hut.fi>
  11.  *                  All rights reserved.
  12.  *
  13.  * Created: Thu Jan 20 18:23:27 1994 too
  14.  * Last modified: Mon Jan 31 22:46:10 1994 too
  15.  */
  16.  
  17. #include <sys/cdefs.h>
  18. #include <inline/stubs.h>
  19.  
  20. __BEGIN_DECLS
  21.  
  22. #ifdef BASE_EXT_DECL
  23. #error BASE_EXT_DECL etc declarations not allowed
  24. #endif
  25.  
  26. #ifndef SOCKETBASE_IN_CONTEXT
  27. #define BASE_EXT_DECL extern struct Library * SocketBase;
  28. #define BASE_PAR_DECL
  29. #define BASE_PAR_DECL0 void
  30. #else
  31. #define BASE_EXT_DECL
  32. #define BASE_PAR_DECL struct Library * SocketBase,
  33. #define BASE_PAR_DECL0 struct Library * SocketBase
  34. #endif
  35. /* #define BASE_NAME SocketBase */
  36.   
  37. #ifndef AMITCP_NEW_NAMES
  38. #define STDSOCKAPI
  39. #define          Socket    socket
  40. #define            Bind    bind
  41. #define          Listen    listen
  42. #define          Accept    accept
  43. #define         Connect    connect
  44. #define            Send    send
  45. #define          SendTo    sendto
  46. #define         SendMsg    sendmsg
  47. #define            Recv    recv
  48. #define        RecvFrom    recvfrom
  49. #define         RecvMsg    recvmsg
  50. #define        Shutdown    shutdown
  51. #define          SetSockOpt    setsockopt
  52. #define          GetSockOpt    getsockopt
  53. #define         GetSockName    getsockname
  54. #define         GetPeerName    getpeername
  55. #define           Inet_Addr    inet_addr
  56. #define        Inet_Network    inet_network
  57. #define       GetHostByName    gethostbyname
  58. #define       GetHostByAddr    gethostbyaddr
  59. #define        GetNetByName    getnetbyname
  60. #define        GetNetByAddr    getnetbyaddr
  61. #define       GetServByName    getservbyname
  62. #define    GetServByPort    getservbyport
  63. #define   GetProtoByName    getprotobyname
  64. #define GetProtoByNumber    getprotobynumber
  65. #define       GetDTableSize    getdtablesize
  66. #define         GetHostName    gethostname
  67. #define           GetHostId    gethostid
  68. #define         SyslogA    vsyslog
  69. #endif
  70.  
  71. static __inline LONG 
  72. Accept (BASE_PAR_DECL LONG s,struct sockaddr * addr,LONG * addrlen)
  73. {
  74.   BASE_EXT_DECL
  75.   register LONG  _res  __asm("d0");
  76.   register struct Library * a6 __asm("a6") = SocketBase;
  77.   register LONG d0 __asm("d0") = s;
  78.   register struct sockaddr *a0 __asm("a0") =  addr;
  79.   register LONG *a1 __asm("a1") =  addrlen;
  80.   __asm __volatile ("jsr a6@(-0x30)"
  81.   : "=r" (_res)
  82.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  83.   : "a0","a1","d0","d1", "memory");
  84.   return _res;
  85. }
  86. static __inline LONG 
  87. Bind (BASE_PAR_DECL LONG s,const struct sockaddr * name,LONG  namelen)
  88. {
  89.   BASE_EXT_DECL
  90.   register LONG  _res  __asm("d0");
  91.   register struct Library * a6 __asm("a6") = SocketBase;
  92.   register LONG d0 __asm("d0") = s;
  93.   register const struct sockaddr *a0 __asm("a0") =  name;
  94.   register LONG d1 __asm("d1") =  namelen;
  95.   __asm __volatile ("jsr a6@(-0x24)"
  96.   : "=r" (_res)
  97.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  98.   : "a0","a1","d0","d1", "memory");
  99.   return _res;
  100. }
  101. static __inline LONG 
  102. CloseSocket (BASE_PAR_DECL LONG d)
  103. {
  104.   BASE_EXT_DECL
  105.   register LONG  _res  __asm("d0");
  106.   register struct Library * a6 __asm("a6") = SocketBase;
  107.   register LONG d0 __asm("d0") = d;
  108.   __asm __volatile ("jsr a6@(-0x78)"
  109.   : "=r" (_res)
  110.   : "r" (a6), "r" (d0)
  111.   : "a0","a1","d0","d1", "memory");
  112.   return _res;
  113. }
  114. static __inline LONG 
  115. Connect (BASE_PAR_DECL LONG s,const struct sockaddr * name,LONG  namelen)
  116. {
  117.   BASE_EXT_DECL
  118.   register LONG  _res  __asm("d0");
  119.   register struct Library * a6 __asm("a6") = SocketBase;
  120.   register LONG d0 __asm("d0") = s;
  121.   register const struct sockaddr *a0 __asm("a0") =  name;
  122.   register LONG d1 __asm("d1") =  namelen;
  123.   __asm __volatile ("jsr a6@(-0x36)"
  124.   : "=r" (_res)
  125.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  126.   : "a0","a1","d0","d1", "memory");
  127.   return _res;
  128. }
  129. static __inline LONG 
  130. Dup2Socket (BASE_PAR_DECL LONG fd1,LONG  fd2)
  131. {
  132.   BASE_EXT_DECL
  133.   register LONG  _res  __asm("d0");
  134.   register struct Library * a6 __asm("a6") = SocketBase;
  135.   register LONG d0 __asm("d0") = fd1;
  136.   register LONG d1 __asm("d1") =  fd2;
  137.   __asm __volatile ("jsr a6@(-0x108)"
  138.   : "=r" (_res)
  139.   : "r" (a6), "r" (d0), "r" (d1)
  140.   : "a0","a1","d0","d1", "memory");
  141.   return _res;
  142. }
  143. static __inline LONG 
  144. Errno (BASE_PAR_DECL0)
  145. {
  146.   BASE_EXT_DECL
  147.   register LONG  _res  __asm("d0");
  148.   register struct Library * a6 __asm("a6") = SocketBase;
  149.   __asm __volatile ("jsr a6@(-0xa2)"
  150.   : "=r" (_res)
  151.   : "r" (a6)
  152.   : "a0","a1","d0","d1", "memory");
  153.   return _res;
  154. }
  155. static __inline LONG 
  156. GetDTableSize (BASE_PAR_DECL0)
  157. {
  158.   BASE_EXT_DECL
  159.   register LONG  _res  __asm("d0");
  160.   register struct Library * a6 __asm("a6") = SocketBase;
  161.   __asm __volatile ("jsr a6@(-0x8a)"
  162.   : "=r" (_res)
  163.   : "r" (a6)
  164.   : "a0","a1","d0","d1", "memory");
  165.   return _res;
  166. }
  167. static __inline struct hostent *
  168. GetHostByAddr (BASE_PAR_DECL const UBYTE *addr,LONG  len,LONG  type)
  169. {
  170.   BASE_EXT_DECL
  171.   register struct hostent * _res  __asm("d0");
  172.   register struct Library * a6 __asm("a6") = SocketBase;
  173.   register const UBYTE *a0 __asm("a0") = addr;
  174.   register LONG d0 __asm("d0") =  len;
  175.   register LONG d1 __asm("d1") =  type;
  176.   __asm __volatile ("jsr a6@(-0xd8)"
  177.   : "=r" (_res)
  178.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  179.   : "a0","a1","d0","d1", "memory");
  180.   return _res;
  181. }
  182. static __inline struct hostent *
  183. GetHostByName (BASE_PAR_DECL const UBYTE *name)
  184. {
  185.   BASE_EXT_DECL
  186.   register struct hostent * _res  __asm("d0");
  187.   register struct Library * a6 __asm("a6") = SocketBase;
  188.   register const UBYTE *a0 __asm("a0") = name;
  189.   __asm __volatile ("jsr a6@(-0xd2)"
  190.   : "=r" (_res)
  191.   : "r" (a6), "r" (a0)
  192.   : "a0","a1","d0","d1", "memory");
  193.   return _res;
  194. }
  195. static __inline ULONG 
  196. GetHostId (BASE_PAR_DECL0)
  197. {
  198.   BASE_EXT_DECL
  199.   register ULONG  _res  __asm("d0");
  200.   register struct Library * a6 __asm("a6") = SocketBase;
  201.   __asm __volatile ("jsr a6@(-0x120)"
  202.   : "=r" (_res)
  203.   : "r" (a6)
  204.   : "a0","a1","d0","d1", "memory");
  205.   return _res;
  206. }
  207. static __inline LONG 
  208. GetHostName (BASE_PAR_DECL const UBYTE *hostname,LONG  size)
  209. {
  210.   BASE_EXT_DECL
  211.   register LONG  _res  __asm("d0");
  212.   register struct Library * a6 __asm("a6") = SocketBase;
  213.   register const UBYTE *a0 __asm("a0") = hostname;
  214.   register LONG d0 __asm("d0") =  size;
  215.   __asm __volatile ("jsr a6@(-0x11a)"
  216.   : "=r" (_res)
  217.   : "r" (a6), "r" (a0), "r" (d0)
  218.   : "a0","a1","d0","d1", "memory");
  219.   return _res;
  220. }
  221. static __inline struct netent *
  222. GetNetByAddr (BASE_PAR_DECL LONG net,LONG  type)
  223. {
  224.   BASE_EXT_DECL
  225.   register struct netent * _res  __asm("d0");
  226.   register struct Library * a6 __asm("a6") = SocketBase;
  227.   register LONG d0 __asm("d0") = net;
  228.   register LONG d1 __asm("d1") =  type;
  229.   __asm __volatile ("jsr a6@(-0xe4)"
  230.   : "=r" (_res)
  231.   : "r" (a6), "r" (d0), "r" (d1)
  232.   : "a0","a1","d0","d1", "memory");
  233.   return _res;
  234. }
  235. static __inline struct netent *
  236. GetNetByName (BASE_PAR_DECL const UBYTE *name)
  237. {
  238.   BASE_EXT_DECL
  239.   register struct netent * _res  __asm("d0");
  240.   register struct Library * a6 __asm("a6") = SocketBase;
  241.   register const UBYTE *a0 __asm("a0") = name;
  242.   __asm __volatile ("jsr a6@(-0xde)"
  243.   : "=r" (_res)
  244.   : "r" (a6), "r" (a0)
  245.   : "a0","a1","d0","d1", "memory");
  246.   return _res;
  247. }
  248. static __inline LONG 
  249. GetPeerName (BASE_PAR_DECL LONG s,struct sockaddr * hostname,LONG * namelen)
  250. {
  251.   BASE_EXT_DECL
  252.   register LONG  _res  __asm("d0");
  253.   register struct Library * a6 __asm("a6") = SocketBase;
  254.   register LONG d0 __asm("d0") = s;
  255.   register struct sockaddr *a0 __asm("a0") =  hostname;
  256.   register LONG *a1 __asm("a1") =  namelen;
  257.   __asm __volatile ("jsr a6@(-0x6c)"
  258.   : "=r" (_res)
  259.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  260.   : "a0","a1","d0","d1", "memory");
  261.   return _res;
  262. }
  263. static __inline struct protoent *
  264. GetProtoByName (BASE_PAR_DECL const UBYTE *name)
  265. {
  266.   BASE_EXT_DECL
  267.   register struct protoent * _res  __asm("d0");
  268.   register struct Library * a6 __asm("a6") = SocketBase;
  269.   register const UBYTE *a0 __asm("a0") = name;
  270.   __asm __volatile ("jsr a6@(-0xf6)"
  271.   : "=r" (_res)
  272.   : "r" (a6), "r" (a0)
  273.   : "a0","a1","d0","d1", "memory");
  274.   return _res;
  275. }
  276. static __inline struct protoent *
  277. GetProtoByNumber (BASE_PAR_DECL LONG proto)
  278. {
  279.   BASE_EXT_DECL
  280.   register struct protoent * _res  __asm("d0");
  281.   register struct Library * a6 __asm("a6") = SocketBase;
  282.   register LONG d0 __asm("d0") = proto;
  283.   __asm __volatile ("jsr a6@(-0xfc)"
  284.   : "=r" (_res)
  285.   : "r" (a6), "r" (d0)
  286.   : "a0","a1","d0","d1", "memory");
  287.   return _res;
  288. }
  289. static __inline struct servent *
  290. GetServByName (BASE_PAR_DECL const UBYTE *name,const UBYTE * proto)
  291. {
  292.   BASE_EXT_DECL
  293.   register struct servent * _res  __asm("d0");
  294.   register struct Library * a6 __asm("a6") = SocketBase;
  295.   register const UBYTE *a0 __asm("a0") = name;
  296.   register const UBYTE *a1 __asm("a1") =  proto;
  297.   __asm __volatile ("jsr a6@(-0xea)"
  298.   : "=r" (_res)
  299.   : "r" (a6), "r" (a0), "r" (a1)
  300.   : "a0","a1","d0","d1", "memory");
  301.   return _res;
  302. }
  303. static __inline struct servent *
  304. GetServByPort (BASE_PAR_DECL LONG port,const UBYTE * proto)
  305. {
  306.   BASE_EXT_DECL
  307.   register struct servent * _res  __asm("d0");
  308.   register struct Library * a6 __asm("a6") = SocketBase;
  309.   register LONG d0 __asm("d0") = port;
  310.   register const UBYTE *a0 __asm("a0") =  proto;
  311.   __asm __volatile ("jsr a6@(-0xf0)"
  312.   : "=r" (_res)
  313.   : "r" (a6), "r" (d0), "r" (a0)
  314.   : "a0","a1","d0","d1", "memory");
  315.   return _res;
  316. }
  317. static __inline LONG 
  318. GetSockName (BASE_PAR_DECL LONG s,struct sockaddr * hostname,LONG * namelen)
  319. {
  320.   BASE_EXT_DECL
  321.   register LONG  _res  __asm("d0");
  322.   register struct Library * a6 __asm("a6") = SocketBase;
  323.   register LONG d0 __asm("d0") = s;
  324.   register struct sockaddr *a0 __asm("a0") =  hostname;
  325.   register LONG *a1 __asm("a1") =  namelen;
  326.   __asm __volatile ("jsr a6@(-0x66)"
  327.   : "=r" (_res)
  328.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  329.   : "a0","a1","d0","d1", "memory");
  330.   return _res;
  331. }
  332. static __inline LONG 
  333. GetSockOpt (BASE_PAR_DECL LONG s,LONG  level,LONG  optname,void * optval,LONG * optlen)
  334. {
  335.   BASE_EXT_DECL
  336.   register LONG  _res  __asm("d0");
  337.   register struct Library * a6 __asm("a6") = SocketBase;
  338.   register LONG d0 __asm("d0") = s;
  339.   register LONG d1 __asm("d1") =  level;
  340.   register LONG d2 __asm("d2") =  optname;
  341.   register void *a0 __asm("a0") =  optval;
  342.   register LONG *a1 __asm("a1") =  optlen;
  343.   __asm __volatile ("jsr a6@(-0x60)"
  344.   : "=r" (_res)
  345.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (a0), "r" (a1)
  346.   : "a0","a1","d0","d1","d2", "memory");
  347.   return _res;
  348. }
  349. static __inline ULONG 
  350. Inet_Addr (BASE_PAR_DECL const UBYTE * cp)
  351. {
  352.   BASE_EXT_DECL
  353.   register ULONG  _res  __asm("d0");
  354.   register struct Library * a6 __asm("a6") = SocketBase;
  355.   register const UBYTE * a0 __asm("a0") = cp;
  356.   __asm __volatile ("jsr a6@(-0xb4)"
  357.   : "=r" (_res)
  358.   : "r" (a6), "r" (a0)
  359.   : "a0","a1","d0","d1", "memory");
  360.   return _res;
  361. }
  362. static __inline ULONG 
  363. Inet_LnaOf (BASE_PAR_DECL LONG in)
  364. {
  365.   BASE_EXT_DECL
  366.   register ULONG  _res  __asm("d0");
  367.   register struct Library * a6 __asm("a6") = SocketBase;
  368.   register LONG d0 __asm("d0") = in;
  369.   __asm __volatile ("jsr a6@(-0xba)"
  370.   : "=r" (_res)
  371.   : "r" (a6), "r" (d0)
  372.   : "a0","a1","d0","d1", "memory");
  373.   return _res;
  374. }
  375. static __inline ULONG 
  376. Inet_MakeAddr (BASE_PAR_DECL ULONG net,ULONG  host)
  377. {
  378.   BASE_EXT_DECL
  379.   register ULONG  _res  __asm("d0");
  380.   register struct Library * a6 __asm("a6") = SocketBase;
  381.   register ULONG d0 __asm("d0") = net;
  382.   register ULONG d1 __asm("d1") =  host;
  383.   __asm __volatile ("jsr a6@(-0xc6)"
  384.   : "=r" (_res)
  385.   : "r" (a6), "r" (d0), "r" (d1)
  386.   : "a0","a1","d0","d1", "memory");
  387.   return _res;
  388. }
  389. static __inline ULONG 
  390. Inet_NetOf (BASE_PAR_DECL LONG in)
  391. {
  392.   BASE_EXT_DECL
  393.   register ULONG  _res  __asm("d0");
  394.   register struct Library * a6 __asm("a6") = SocketBase;
  395.   register LONG d0 __asm("d0") = in;
  396.   __asm __volatile ("jsr a6@(-0xc0)"
  397.   : "=r" (_res)
  398.   : "r" (a6), "r" (d0)
  399.   : "a0","a1","d0","d1", "memory");
  400.   return _res;
  401. }
  402. static __inline ULONG 
  403. Inet_Network (BASE_PAR_DECL const UBYTE * cp)
  404. {
  405.   BASE_EXT_DECL
  406.   register ULONG  _res  __asm("d0");
  407.   register struct Library * a6 __asm("a6") = SocketBase;
  408.   register const UBYTE * a0 __asm("a0") = cp;
  409.   __asm __volatile ("jsr a6@(-0xcc)"
  410.   : "=r" (_res)
  411.   : "r" (a6), "r" (a0)
  412.   : "a0","a1","d0","d1", "memory");
  413.   return _res;
  414. }
  415. static __inline char *
  416. Inet_NtoA (BASE_PAR_DECL ULONG in)
  417. {
  418.   BASE_EXT_DECL
  419.   register char * _res  __asm("d0");
  420.   register struct Library * a6 __asm("a6") = SocketBase;
  421.   register ULONG d0 __asm("d0") = in;
  422.   __asm __volatile ("jsr a6@(-0xae)"
  423.   : "=r" (_res)
  424.   : "r" (a6), "r" (d0)
  425.   : "a0","a1","d0","d1", "memory");
  426.   return _res;
  427. }
  428. static __inline LONG 
  429. IoctlSocket (BASE_PAR_DECL LONG d,ULONG  request,char * argp)
  430. {
  431.   BASE_EXT_DECL
  432.   register LONG  _res  __asm("d0");
  433.   register struct Library * a6 __asm("a6") = SocketBase;
  434.   register LONG d0 __asm("d0") = d;
  435.   register ULONG d1 __asm("d1") =  request;
  436.   register char *a0 __asm("a0") =  argp;
  437.   __asm __volatile ("jsr a6@(-0x72)"
  438.   : "=r" (_res)
  439.   : "r" (a6), "r" (d0), "r" (d1), "r" (a0)
  440.   : "a0","a1","d0","d1", "memory");
  441.   return _res;
  442. }
  443. static __inline LONG 
  444. Listen (BASE_PAR_DECL LONG s,LONG  backlog)
  445. {
  446.   BASE_EXT_DECL
  447.   register LONG  _res  __asm("d0");
  448.   register struct Library * a6 __asm("a6") = SocketBase;
  449.   register LONG d0 __asm("d0") = s;
  450.   register LONG d1 __asm("d1") =  backlog;
  451.   __asm __volatile ("jsr a6@(-0x2a)"
  452.   : "=r" (_res)
  453.   : "r" (a6), "r" (d0), "r" (d1)
  454.   : "a0","a1","d0","d1", "memory");
  455.   return _res;
  456. }
  457. static __inline LONG 
  458. ObtainSocket (BASE_PAR_DECL LONG id,LONG  domain,LONG  type,LONG  protocol)
  459. {
  460.   BASE_EXT_DECL
  461.   register LONG  _res  __asm("d0");
  462.   register struct Library * a6 __asm("a6") = SocketBase;
  463.   register LONG d0 __asm("d0") = id;
  464.   register LONG d1 __asm("d1") =  domain;
  465.   register LONG d2 __asm("d2") =  type;
  466.   register LONG d3 __asm("d3") =  protocol;
  467.   __asm __volatile ("jsr a6@(-0x90)"
  468.   : "=r" (_res)
  469.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  470.   : "a0","a1","d0","d1","d2","d3", "memory");
  471.   return _res;
  472. }
  473. static __inline LONG 
  474. Recv (BASE_PAR_DECL LONG s,UBYTE * buf,LONG  len,LONG  flags)
  475. {
  476.   BASE_EXT_DECL
  477.   register LONG  _res  __asm("d0");
  478.   register struct Library * a6 __asm("a6") = SocketBase;
  479.   register LONG d0 __asm("d0") = s;
  480.   register UBYTE *a0 __asm("a0") =  buf;
  481.   register LONG d1 __asm("d1") =  len;
  482.   register LONG d2 __asm("d2") =  flags;
  483.   __asm __volatile ("jsr a6@(-0x4e)"
  484.   : "=r" (_res)
  485.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2)
  486.   : "a0","a1","d0","d1","d2", "memory");
  487.   return _res;
  488. }
  489. static __inline LONG 
  490. RecvFrom (BASE_PAR_DECL LONG s,UBYTE * buf,LONG  len,LONG  flags,struct sockaddr * from,LONG * fromlen)
  491. {
  492.   BASE_EXT_DECL
  493.   register LONG  _res  __asm("d0");
  494.   register struct Library * a6 __asm("a6") = SocketBase;
  495.   register LONG d0 __asm("d0") = s;
  496.   register UBYTE *a0 __asm("a0") =  buf;
  497.   register LONG d1 __asm("d1") =  len;
  498.   register LONG d2 __asm("d2") =  flags;
  499.   register struct sockaddr *a1 __asm("a1") =  from;
  500.   register LONG *a2 __asm("a2") =  fromlen;
  501.   __asm __volatile ("jsr a6@(-0x48)"
  502.   : "=r" (_res)
  503.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2), "r" (a1), "r" (a2)
  504.   : "a0","a1","a2","d0","d1","d2", "memory");
  505.   return _res;
  506. }
  507. static __inline LONG 
  508. RecvMsg (BASE_PAR_DECL LONG s,struct msghdr *  msg,LONG  flags)
  509. {
  510.   BASE_EXT_DECL
  511.   register LONG  _res  __asm("d0");
  512.   register struct Library * a6 __asm("a6") = SocketBase;
  513.   register LONG d0 __asm("d0") = s;
  514.   register struct msghdr * a0 __asm("a0") =  msg;
  515.   register LONG d1 __asm("d1") =  flags;
  516.   __asm __volatile ("jsr a6@(-0x114)"
  517.   : "=r" (_res)
  518.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  519.   : "a0","a1","d0","d1", "memory");
  520.   return _res;
  521. }
  522. static __inline LONG 
  523. ReleaseCopyOfSocket (BASE_PAR_DECL LONG fd,LONG  id)
  524. {
  525.   BASE_EXT_DECL
  526.   register LONG  _res  __asm("d0");
  527.   register struct Library * a6 __asm("a6") = SocketBase;
  528.   register LONG d0 __asm("d0") = fd;
  529.   register LONG d1 __asm("d1") =  id;
  530.   __asm __volatile ("jsr a6@(-0x9c)"
  531.   : "=r" (_res)
  532.   : "r" (a6), "r" (d0), "r" (d1)
  533.   : "a0","a1","d0","d1", "memory");
  534.   return _res;
  535. }
  536. static __inline LONG 
  537. ReleaseSocket (BASE_PAR_DECL LONG fd,LONG  id)
  538. {
  539.   BASE_EXT_DECL
  540.   register LONG  _res  __asm("d0");
  541.   register struct Library * a6 __asm("a6") = SocketBase;
  542.   register LONG d0 __asm("d0") = fd;
  543.   register LONG d1 __asm("d1") =  id;
  544.   __asm __volatile ("jsr a6@(-0x96)"
  545.   : "=r" (_res)
  546.   : "r" (a6), "r" (d0), "r" (d1)
  547.   : "a0","a1","d0","d1", "memory");
  548.   return _res;
  549. }
  550. static __inline LONG 
  551. Send (BASE_PAR_DECL LONG s,const UBYTE * msg,LONG  len,LONG  flags)
  552. {
  553.   BASE_EXT_DECL
  554.   register LONG  _res  __asm("d0");
  555.   register struct Library * a6 __asm("a6") = SocketBase;
  556.   register LONG d0 __asm("d0") = s;
  557.   register const UBYTE *a0 __asm("a0") =  msg;
  558.   register LONG d1 __asm("d1") =  len;
  559.   register LONG d2 __asm("d2") =  flags;
  560.   __asm __volatile ("jsr a6@(-0x42)"
  561.   : "=r" (_res)
  562.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2)
  563.   : "a0","a1","d0","d1","d2", "memory");
  564.   return _res;
  565. }
  566. static __inline LONG 
  567. SendMsg (BASE_PAR_DECL LONG s,struct msghdr *  msg,LONG  flags)
  568. {
  569.   BASE_EXT_DECL
  570.   register LONG  _res  __asm("d0");
  571.   register struct Library * a6 __asm("a6") = SocketBase;
  572.   register LONG d0 __asm("d0") = s;
  573.   register struct msghdr * a0 __asm("a0") =  msg;
  574.   register LONG d1 __asm("d1") =  flags;
  575.   __asm __volatile ("jsr a6@(-0x10e)"
  576.   : "=r" (_res)
  577.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1)
  578.   : "a0","a1","d0","d1", "memory");
  579.   return _res;
  580. }
  581. static __inline LONG 
  582. SendTo (BASE_PAR_DECL LONG s,const UBYTE * msg,LONG  len,LONG  flags,const struct sockaddr * to,LONG  tolen)
  583. {
  584.   BASE_EXT_DECL
  585.   register LONG  _res  __asm("d0");
  586.   register struct Library * a6 __asm("a6") = SocketBase;
  587.   register LONG d0 __asm("d0") = s;
  588.   register const UBYTE *a0 __asm("a0") =  msg;
  589.   register LONG d1 __asm("d1") =  len;
  590.   register LONG d2 __asm("d2") =  flags;
  591.   register const struct sockaddr *a1 __asm("a1") =  to;
  592.   register LONG d3 __asm("d3") =  tolen;
  593.   __asm __volatile ("jsr a6@(-0x3c)"
  594.   : "=r" (_res)
  595.   : "r" (a6), "r" (d0), "r" (a0), "r" (d1), "r" (d2), "r" (a1), "r" (d3)
  596.   : "a0","a1","d0","d1","d2","d3", "memory");
  597.   return _res;
  598. }
  599. static __inline void 
  600. SetErrnoPtr (BASE_PAR_DECL void *errno_p,LONG  size)
  601. {
  602.   BASE_EXT_DECL
  603.   register struct Library * a6 __asm("a6") = SocketBase;
  604.   register void *a0 __asm("a0") = errno_p;
  605.   register LONG d0 __asm("d0") =  size;
  606.   __asm __volatile ("jsr a6@(-0xa8)"
  607.   : /* no output */
  608.   : "r" (a6), "r" (a0), "r" (d0)
  609.   : "a0","a1","d0","d1", "memory");
  610. }
  611. static __inline LONG 
  612. SetSockOpt (BASE_PAR_DECL LONG s,LONG  level,LONG  optname,const void * optval,LONG  optlen)
  613. {
  614.   BASE_EXT_DECL
  615.   register LONG  _res  __asm("d0");
  616.   register struct Library * a6 __asm("a6") = SocketBase;
  617.   register LONG d0 __asm("d0") = s;
  618.   register LONG d1 __asm("d1") =  level;
  619.   register LONG d2 __asm("d2") =  optname;
  620.   register const void *a0 __asm("a0") =  optval;
  621.   register LONG d3 __asm("d3") =  optlen;
  622.   __asm __volatile ("jsr a6@(-0x5a)"
  623.   : "=r" (_res)
  624.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (a0), "r" (d3)
  625.   : "a0","a1","d0","d1","d2","d3", "memory");
  626.   return _res;
  627. }
  628. static __inline void 
  629. SetSocketSignals (BASE_PAR_DECL ULONG SIGINTR,ULONG  SIGIO,ULONG  SIGURG)
  630. {
  631.   BASE_EXT_DECL
  632.   register struct Library * a6 __asm("a6") = SocketBase;
  633.   register ULONG d0 __asm("d0") = SIGINTR;
  634.   register ULONG d1 __asm("d1") =  SIGIO;
  635.   register ULONG d2 __asm("d2") =  SIGURG;
  636.   __asm __volatile ("jsr a6@(-0x84)"
  637.   : /* no output */
  638.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2)
  639.   : "a0","a1","d0","d1","d2", "memory");
  640. }
  641. static __inline LONG 
  642. Shutdown (BASE_PAR_DECL LONG s,LONG  how)
  643. {
  644.   BASE_EXT_DECL
  645.   register LONG  _res  __asm("d0");
  646.   register struct Library * a6 __asm("a6") = SocketBase;
  647.   register LONG d0 __asm("d0") = s;
  648.   register LONG d1 __asm("d1") =  how;
  649.   __asm __volatile ("jsr a6@(-0x54)"
  650.   : "=r" (_res)
  651.   : "r" (a6), "r" (d0), "r" (d1)
  652.   : "a0","a1","d0","d1", "memory");
  653.   return _res;
  654. }
  655. static __inline LONG 
  656. Socket (BASE_PAR_DECL LONG domain,LONG  type,LONG  protocol)
  657. {
  658.   BASE_EXT_DECL
  659.   register LONG  _res  __asm("d0");
  660.   register struct Library * a6 __asm("a6") = SocketBase;
  661.   register LONG d0 __asm("d0") = domain;
  662.   register LONG d1 __asm("d1") =  type;
  663.   register LONG d2 __asm("d2") =  protocol;
  664.   __asm __volatile ("jsr a6@(-0x1e)"
  665.   : "=r" (_res)
  666.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2)
  667.   : "a0","a1","d0","d1","d2", "memory");
  668.   return _res;
  669. }
  670. static __inline LONG 
  671. SocketBaseTagList (BASE_PAR_DECL struct TagItem *taglist)
  672. {
  673.   BASE_EXT_DECL
  674.   register LONG  _res  __asm("d0");
  675.   register struct Library * a6 __asm("a6") = SocketBase;
  676.   register struct TagItem *a0 __asm("a0") = taglist;
  677.   __asm __volatile ("jsr a6@(-0x126)"
  678.   : "=r" (_res)
  679.   : "r" (a6), "r" (a0)
  680.   : "a0","a1","d0","d1", "memory");
  681.   return _res;
  682. }
  683.  
  684. #ifndef NO_INLINE_STDARG
  685. #define SocketBaseTags(tags...) \
  686.     ({ ULONG _tags[] = { tags }; SocketBaseTagList(_tags); })
  687. #endif
  688.  
  689. static __inline LONG 
  690. WaitSelect (BASE_PAR_DECL LONG nfds,fd_set * readfds,fd_set * writefds,fd_set * execptfds,struct timeval * timeout,ULONG * maskp)
  691. {
  692.   BASE_EXT_DECL
  693.   register LONG  _res  __asm("d0");
  694.   register struct Library * a6 __asm("a6") = SocketBase;
  695.   register LONG d0 __asm("d0") = nfds;
  696.   register fd_set *a0 __asm("a0") =  readfds;
  697.   register fd_set *a1 __asm("a1") =  writefds;
  698.   register fd_set *a2 __asm("a2") =  execptfds;
  699.   register struct timeval *a3 __asm("a3") =  timeout;
  700.   register ULONG *d1 __asm("d1") =  maskp;
  701.   __asm __volatile ("jsr a6@(-0x7e)"
  702.   : "=r" (_res)
  703.   : "r" (a6), "r" (d0), "r" (a0), "r" (a1), "r" (a2), "r" (a3), "r" (d1)
  704.   : "a0","a1","a2","a3","d0","d1", "memory");
  705.   return _res;
  706. }
  707.  
  708.  
  709. #ifdef STDSOCKAPI
  710. #undef STDSOCKAPI
  711. #undef Socket
  712. #undef Bind
  713. #undef Listen
  714. #undef Accept
  715. #undef Connect
  716. #undef Send
  717. #undef SendTo
  718. #undef SendMsg
  719. #undef Recv
  720. #undef RecvFrom
  721. #undef RecvMsg
  722. #undef Shutdown
  723. #undef SetSockOpt
  724. #undef GetSockOpt
  725. #undef GetSockName
  726. #undef GetPeerName
  727. #undef Inet_Addr
  728. #undef Inet_Network
  729. #undef GetHostByName
  730. #undef GetHostByAddr
  731. #undef GetNetByName
  732. #undef GetNetByAddr
  733. #undef GetServByName
  734. #undef GetServByPort
  735. #undef GetProtoByName
  736. #undef GetProtoByNumber
  737. #undef GetDTableSize
  738. #undef GetHostName
  739. #undef GetHostId
  740. #undef SyslogA
  741. #endif
  742.  
  743.  
  744. static __inline LONG 
  745. InheritSocket (BASE_PAR_DECL LONG id)
  746. {
  747.   BASE_EXT_DECL
  748.   register LONG  _res  __asm("d0");
  749.   register struct Library * a6 __asm("a6") = SocketBase;
  750.   register LONG d0 __asm("d0") = id;
  751.   register LONG d1 __asm("d1") =  0;
  752.   __asm __volatile ("jsr a6@(-0x90)"
  753.   : "=r" (_res)
  754.   : "r" (a6), "r" (d0), "r" (d1)
  755.   : "a0","a1","d0","d1", "memory");
  756.   return _res;
  757. }
  758.  
  759.  
  760. #ifdef SOCKETBASE_IN_CONTEXT
  761.  
  762. #ifdef AMITCP_NEW_NAMES
  763.  
  764. #define             Socket(r...)    Socket(SocketBase, r)
  765. #define               Bind(r...)    Bind(SocketBase, r)
  766. #define             Listen(r...)    Listen(SocketBase, r)
  767. #define             Accept(r...)    Accept(SocketBase, r)
  768. #define            Connect(r...)    Connect(SocketBase, r)
  769. #define             SendTo(r...)    SendTo(SocketBase, r)
  770. #define               Send(r...)    Send(SocketBase, r)
  771. #define           RecvFrom(r...)    RecvFrom(SocketBase, r)
  772. #define               Recv(r...)    Recv(SocketBase, r)
  773. #define           Shutdown(r...)    Shutdown(SocketBase, r)
  774. #define         SetSockOpt(r...)    SetSockOpt(SocketBase, r)
  775. #define         GetSockOpt(r...)    GetSockOpt(SocketBase, r)
  776. #define        GetSockName(r...)    GetSockName(SocketBase, r)
  777. #define        GetPeerName(r...)    GetPeerName(SocketBase, r)
  778.  
  779. #define          GetDTableSize()        GetDTableSize(SocketBase)
  780.  
  781. #define          Inet_Addr(r...)    Inet_Addr(SocketBase, r)
  782. #define           Inet_Network(r...)    Inet_Network(SocketBase, r)
  783. #define          GetHostByName(r...)    GetHostByName(SocketBase, r)
  784. #define          GetHostByAddr(r...)    GetHostByAddr(SocketBase, r)
  785. #define           GetNetByName(r...)    GetNetByName(SocketBase, r)
  786. #define           GetNetByAddr(r...)    GetNetByAddr(SocketBase, r)
  787. #define          GetServByName(r...)    GetServByName(SocketBase, r)
  788. #define          GetServByPort(r...)    GetServByPort(SocketBase, r)
  789. #define         GetProtoByName(r...)    GetProtoByName(SocketBase, r)
  790. #define       GetProtoByNumber(r...)    GetProtoByNumber(SocketBase, r)
  791.  
  792. #define            SyslogA(r...)    SyslogA(SocketBase, r)
  793.  
  794. #define            SendMsg(r...)    SendMsg(SocketBase, r)
  795. #define            RecvMsg(r...)    RecvMsg(SocketBase, r)
  796.  
  797. #define        GetHostName(r...)    GetHostName(SocketBase, r)
  798. #define          GetHostId()        GetHostId(SocketBase)
  799.  
  800. #else /* AMITCP_OLD_NAMES */
  801.  
  802. #define             socket(r...)    socket(SocketBase, r)
  803. #define               bind(r...)    bind(SocketBase, r)
  804. #define             listen(r...)    listen(SocketBase, r)
  805. #define             accept(r...)    accept(SocketBase, r)
  806. #define            connect(r...)    connect(SocketBase, r)
  807. #define             sendto(r...)    sendto(SocketBase, r)
  808. #define               send(r...)    send(SocketBase, r)
  809. #define           recvfrom(r...)    recvfrom(SocketBase, r)
  810. #define               recv(r...)    recv(SocketBase, r)
  811. #define           shutdown(r...)    shutdown(SocketBase, r)
  812. #define         setsockopt(r...)    setsockopt(SocketBase, r)
  813. #define         getsockopt(r...)    getsockopt(SocketBase, r)
  814. #define        getsockname(r...)    getsockname(SocketBase, r)
  815. #define        getpeername(r...)    getpeername(SocketBase, r)
  816.  
  817. #define          getdtablesize()        getdtablesize(SocketBase)
  818.  
  819. #define          inet_addr(r...)    inet_addr(SocketBase, r)
  820. #define           inet_network(r...)    inet_network(SocketBase, r)
  821.  
  822. #define          gethostbyname(r...)    gethostbyname(SocketBase, r)
  823. #define          gethostbyaddr(r...)    gethostbyaddr(SocketBase, r)
  824. #define           getnetbyname(r...)    getnetbyname(SocketBase, r)
  825. #define           getnetbyaddr(r...)    getnetbyaddr(SocketBase, r)
  826. #define          getservbyname(r...)    getservbyname(SocketBase, r)
  827. #define          getservbyport(r...)    getservbyport(SocketBase, r)
  828. #define         getprotobyname(r...)    getprotobyname(SocketBase, r)
  829. #define       getprotobynumber(r...)    getprotobynumber(SocketBase, r)
  830.  
  831. #define            vsyslog(r...)    vsyslog(SocketBase, r)
  832.  
  833. #define            sendmsg(r...)    sendmsg(SocketBase, r)
  834. #define            recvmsg(r...)    recvmsg(SocketBase, r)
  835.  
  836. #define        gethostname(r...)    gethostname(SocketBase, r)
  837. #define          gethostid()        gethostid(SocketBase)
  838.  
  839. #endif /* AMITCP_NEW_NAMES */
  840.  
  841. #define        IoctlSocket(r...)    IoctlSocket(SocketBase, r)
  842. #define        CloseSocket(r...)    CloseSocket(SocketBase, r)
  843.  
  844. #define         WaitSelect(r...)    WaitSelect(SocketBase, r)
  845. #define       SetSocketSignals(r...)    SetSocketSignals(SocketBase, r)
  846.  
  847. #define           ObtainSocket(r...)    ObtainSocket(SocketBase, r)
  848. #define          ReleaseSocket(r...)    ReleaseSocket(SocketBase, r)
  849. #define ReleaseCopyOfSocket(r...)    ReleaseCopyOfSocket(SocketBase, r)
  850. #define              Errno()        Errno(SocketBase)
  851. #define        SetErrnoPtr(r...)    SetErrnoPtr(SocketBase, r)
  852.  
  853. #define          Inet_NtoA(r...)    Inet_NtoA(SocketBase, r)
  854. #define         Inet_LnaOf(r...)    Inet_LnaOf(SocketBase, r)
  855. #define         Inet_NetOf(r...)    Inet_NetOf(SocketBase, r)
  856. #define          Inet_MakeAddr(r...)    Inet_MakeAddr(SocketBase, r)
  857.  
  858. #define   SocketBaseTagList(r...)    SocketBaseTagList(SocketBase, r)
  859.  
  860. #define          InheritSocket(r...)    InheritSocket(SocketBase, r)
  861.  
  862. #endif /* SOCKETBASE_IN_CONTEXT */
  863.  
  864.  
  865. #ifndef AMITCP_NEW_NAMES
  866.  
  867. #include <netinet/in.h>
  868.  
  869. static __inline LONG
  870.   select(BASE_PAR_DECL LONG nfds, fd_set *readfds, fd_set *writefds, fd_set *exeptfds, struct timeval *timeout)
  871. {
  872.   return WaitSelect(nfds, readfds, writefds, exeptfds, timeout, NULL);
  873. }
  874.  
  875. static __inline char * 
  876.   inet_ntoa(BASE_PAR_DECL struct in_addr addr) 
  877. {
  878.   return Inet_NtoA(addr.s_addr);
  879. }
  880. static __inline struct in_addr
  881.   inet_makeaddr(BASE_PAR_DECL int net, int host)
  882. {
  883.   struct in_addr addr;
  884.  
  885.   addr.s_addr = Inet_MakeAddr(net, host);
  886.   return addr;
  887. }
  888. static __inline unsigned long
  889.   inet_lnaof(BASE_PAR_DECL struct in_addr addr) 
  890. {
  891.   return Inet_LnaOf(addr.s_addr);
  892. }
  893. static __inline unsigned long
  894.   inet_netof(BASE_PAR_DECL struct in_addr addr)
  895. {
  896.   return Inet_NetOf(addr.s_addr);
  897. }
  898.  
  899. #ifdef SOCKETBASE_IN_CONTEXT
  900.  
  901. #define           select(r...)    select(SocketBase, r)
  902. #define     inet_ntoa(r...)    inet_ntoa(SocketBase, r)
  903. #define inet_makeaddr(r...)    inet_makeaddr(SocketBase, r)
  904. #define    inet_lnaof(r...)    inet_lnaof(SocketBase, r)
  905. #define    inet_netof(r...)    inet_netof(SocketBase, r)
  906.  
  907. #endif /* SOCKETBASE_IN_CONTEXT */
  908.  
  909. #endif /* ! AMITCP_NEW_NAMES */
  910.  
  911.  
  912. #undef BASE_EXT_DECL
  913. #undef BASE_PAR_DECL
  914. #undef BASE_PAR_DECL0
  915. /* #undef BASE_NAME */
  916.  
  917. __END_DECLS
  918.  
  919. #endif /* _INLINE_SOCKET_H */
  920.